其他
性能优化技巧:后半有序分组
1. Oracle测试
select * from (
select /*+ parallel(n) */
area, salesman, sum(amount) as amount
from sales
group by area, salesman
) where amount<471000;
其中/*+ parallel(n) */ 用于并行测试,n为并行数。
2. SPL后半有序分组
A | |
1 | =now() |
2 | =file("/home/ctx/sales.ctx").open().cursor@m(area,salesman,amount;;1) |
3 | =A2.groups@h(area,salesman;sum(amount):amount).select(amount<471000) |
4 | =interval@s(A1,now()) |
groups分组时加选项@h就表示分组字段是后半有序(分段有序)的,让SPL先用快速排序算法对分组字段排序,之后再采用有序分组来优化。
3. SPL HASH分组
4. 测试结果
并行数 | 1 | 2 | 4 |
Oracle | 387 | 195 | 104 |
SPL (HASH) | 405 | 208 | 121 |
SPL (后半有序) | 252 | 142 | 83 |
从测试结果看,SPL后半有序分组的运行时间比使用HASH分组的SPL和Oracle都要快不少,效率提高50%以上,性能提升比较明显。Java写的SPL常规分组比C语言写的Oracle略慢也是正常现象(测试中使用了所有列,SPL的列存优势没有效果)。
重磅!开源SPL交流群成立了
简单好用的SPL开源啦!
为了给感兴趣的小伙伴们提供一个相互交流的平台,
特地开通了交流群(群完全免费,不广告不卖课)
需要进群的朋友,可长按扫描下方二维码
本文感兴趣的朋友,请转到阅读原文去收藏 ^_^